
// 图片资源模块接口
interface ImgModule {
  default: string
}

// 默认导出
class ImgUtil {
  private static loading = false // 用于标识是否已经加载了图片
  // 静态属性对象用于保存key(图片名)/value(图片绝对路径) 
  private static imgList: Record<string, string> = {}

  // private 只允许类的内部进行调用 根据 ImgModule 来加载资源
  private static loadImgModule(imgModule: Record<string, ImgModule>) {
    let absolutePath = '' // 保存图片绝对路径
    let imgName = '' //保存 图片名
    for (let relativePath in imgModule) {
      absolutePath = imgModule[relativePath].default // 获取图片绝对路径
      // substring 从索引哪个位置开始截取字符串
      // lastIndexOf 获取最后一个 / 所在的索引
      imgName = absolutePath.substring(absolutePath.lastIndexOf('/') + 1) // 根据绝对路径获取图片名
      this.imgList[imgName] = absolutePath // 将图片名和图片绝对路径以key/value的形式保存到 this.imgList 中
    }
  }

  // private 只允许类的内部进行调用 加载图片 静态方法
  private static loadAllImg() {
    // 导入 assets/img 文件夹下面的所有 png 模块 , { eager: true } 以同步的方式加载
    const jpgModule = import.meta.glob<ImgModule>('../assets/img/**/*.jpg', { eager: true })
    const pngModule = import.meta.glob<ImgModule>('../assets/img/**/*.png', { eager: true })
    this.loadImgModule(jpgModule)
    this.loadImgModule(pngModule)
    
  }

  // 根据图片名获取图片绝对路径 (惰性函数)
    static getImg(imgName: string) {
    if (this.loading === false) {
      this.loadAllImg()
      this.loading = true
      this.getImg = function(imgName: string) {
        return ImgUtil.imgList[imgName]
      }
    }
    return this.imgList[imgName]
  }
}


export default ImgUtil
